const Logger = require('../core/logger');

/**
 * @name 解析代理配置字符串
 * @param {string} _Str 传入的代理配置
 */
function ParseProxyString(_Str = '/') {
  // 是否只设置了前缀
  const proxyString = /^\//.test(_Str) ? `127.0.0.1${_Str}` : _Str;
  // 分割prefix和server
  let [server, prefix = 'api'] = proxyString.split(/(?<!\/)\/(?!\/)/);
  // 是否传递了协议
  // 如果没有传递协议，默认http
  if (/^(http)/.test(server) === false) {
    server = `http://${server}`
  }
  return { server, prefix }
}

/**
 * @param {{proxy:string}} _Config 传入的配置
 */
module.exports = function (_Config) {
  // 更新参数配置
  Object.assign(_Config, ParseProxyString(_Config.proxy));
  try {
    const { createProxyMiddleware } = require('http-proxy-middleware');
    // 相关配置信息提示
    Logger.info(`代理服务启动成功，/${_Config.prefix}开头的请求将被转发到${_Config.server}`)
    if (createProxyMiddleware) {
      return createProxyMiddleware({
        target: _Config.server,
        changeOrigin: true,
        logger: Logger,
        pathRewrite: {
          [`^/${_Config.prefix}`]: ''
        }
      });
    }
  } catch {
    const tips = '如需代理，你需要自己安装代理相关依赖，npm install http-proxy-middleware -D'
    // 失败后进行友情提示
    Logger.warn(tips);
    return function (_req, _res) {
      // 结束请求
      _res.end(tips, 'utf-8')
      // 进行友情提示
      Logger.warn(tips);
    }
  }
}